import store from "../store";
import * as Types from "@/store/action-types.js";

export default {
  // 此字段只是给自己看的，没有任何实际的意义
  clear_token: (to, from, next) => {
    store.commit(Types.CLEAR_TOKEN);
    next();
  },
  login_permissiom: async (to, from, next) => {
    // 用户是否需要登录才能访问的表示
    let needLogin = to.matched.some((item) => item.meta.needLogin);
    // console.log(needLogin);
    // 如果vuex中有值， 我就认为你当前登录过了
    if (!store.state.user.hasPermission) {
      // 用户刷新token在， 但是vuex中丢失了
      // 返回一个isLogin字段 表示用户是否登录过了

      let isLogin = await store.dispatch(`user/${Types.VALIDATE}`);
      if (needLogin) {
        // 需要登录
        if (!isLogin) {
          next("/login"); // 需要登录但没登录
        } else {
          next(); // 需要登录， 也登录了
        }
      } else {
        // 不需要登录
        if (to.name == "login") {
          // 访问的是登录页
          if (!isLogin) {
            next();
          } else {
            next("/profile");
          }
        } else {
          next();
        }
      }
    } else {
      //
      if (to.name == "login") {
        next("/profile");
      } else {
        next();
      }
    }
    // 登录校验
    next();
  },
};
